綁定事件就是可以回傳在執行時的動作位置,雖然說有很多的不同事件可以使用,但是要注意,當滑鼠與鍵盤同時綁定時會出現小陷阱,下面會有實例跟大家說明要怎麼解決這個問題喔~
語法:widget.bind(event,handler)
♠♣今天的文章大綱♥♦
python tk 的事件有分成三種,滑鼠鍵盤跟控建
滑鼠事件:
<Button-1>
點選滑鼠一下,python shell印出當前點選的座標xy。1是點滑鼠左鍵,2是點滑鼠中間鍵,3是點右鍵,4是滑鼠滑輪向上滾動,5是滑鼠滑輪向下滾動。
<B1-Motion>
拖曳,按住滑鼠,python shell印出當前點選的座標xy。1是點滑鼠左鍵,2是點滑鼠中間鍵,3是點右鍵。
<ButtonRelease-1>
放開滑鼠,,python shell印出當前點選的座標xy。1是點滑鼠左鍵,2是點滑鼠中間鍵,3是點右鍵。
<Double-Button-1>
連按2下滑鼠,python shell印出當前點選的座標xy。1是點滑鼠左鍵,2是點滑鼠中間鍵,3是點右鍵。
<Motion>
滑鼠移動,python shell印出當前點選的座標xy。
<Enter>
滑鼠游標進入 Widget 控件。
<Leave>
滑鼠游標離開 Widget 控件。
鍵盤事件:
<Focusin>
鍵盤焦點進入 Widget 控件。
<FocusOut>
鍵盤焦點離開 Widget 控件。
<Return>
按下 Enter 鍵,鍵盤所有間接可以被綁定。
<Key>
按下某鍵盤鍵,鍵值會被儲存在 event 物件中傳遞。
<Shift-Up>
按住 Shift 鍵時按下 Up 鍵。
<Alt-Up>
按住Alt 鍵時按下 Up 鍵。
<Ctrl-Up>
按住Ctrl 鍵時按下 Up 鍵。
控見事件:
<Configure>
新控件大小的 width 與 height 會存在event 物件內。
import tkinter as tk
root = tk.Tk()
root.title('cuteluluWindow')
root.configure(bg="#7AFEC6")
root.iconbitmap('heart_green.ico')
root.geometry('300x180')
def cursors(event):
print("Clicked at", event.x, event.y)
frame=tk.Frame (root, width = 300, height=180,bg="#7AFEC6")
frame.bind("<Button-1>", cursors)
frame.pack()
root.mainloop()
執行結果⬇⬇⬇
這邊滑鼠形狀是我電腦本身的,並不是程式碼裡面有改喔~如果想知道如何改滑鼠形狀可以參考Day6~
import tkinter as tk
root = tk.Tk()
root.title('cuteluluWindow')
root.configure(bg="#7AFEC6")
root.iconbitmap('heart_green.ico')
root.geometry('300x150')
def key(event):
print ("pressed",repr(event.char))
def cursors(event):
frame.focus_set() #取得物件焦點
print ("clicked at", event.x, event.y)
L=tk.Label(root,text="click your cursor first",
font=("Algerian",15,"bold"),bg='#ADFEDC',fg='#00CACA')
L.pack()
frame = tk.Frame(root, width=300, height=150,bg="#7AFEC6")
frame.bind("<Key>", key)
frame.bind("<Button-1>", cursors)
frame.pack()
root.mainloop()
執行結果⬇⬇⬇
這邊就是會出現小陷阱的地方,當執行這個程式碼時,會發現按鍵盤沒東西跑出來,所以就要在程式碼裡加入 frame.focus_set(),取得物件的焦點後,這樣才可以正常執行喔~但還是要點滑鼠鍵在點鍵盤python shell才會出現位置資訊。
今天文章重點就是,當滑鼠與鍵盤同時綁定時,需要多加一行程式碼frame.focus_set(),讓兩個都可以順利地綁定~